package juego;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;



public class Avioneta extends Armado{
	
	//Atributos de clase
	private static int miImpacto = 10;
	private static int miPuntajePorDestruccion = 20;
	private static int miResistenciaMaxima = 6;
	private static int miTamanio = 10;
	private static int miVelocidad = 15;
	private static int miTiempoEspera= 20;//1;
	
	//Atributos de instancia
    private int sentido;
    private int contador;
    
    //Metodos
    
  //Constructor recibe Coordenada
    public Avioneta(Coordenada coordenada){
    	super(coordenada, miResistenciaMaxima, miTiempoEspera);
    	this.sentido = 1;
    	this.contador = 0;
    	ArmaLaser unArmaLaser = new ArmaLaser();
    	this.armamento.add(unArmaLaser);
    };
    
    //Constructor recibe 2 enteros
    public Avioneta(int x, int y){
    	super(new Coordenada(x,y), miResistenciaMaxima, miTiempoEspera);
    	this.sentido = 1;
    	this.contador = 0;
    	ArmaLaser unArmaLaser = new ArmaLaser();
    	this.armamento.add(unArmaLaser);
    };

    
    
    //Devuelve el impacto provocado
    @Override
	public Impacto impactoProvocado(){
		return new ImpactoLineal(miImpacto);
	};    
	
	
    //Devuelve el puntaje por haber sido destruido
    public int puntajePorDestruccion(){
    	return miPuntajePorDestruccion;
    };
    
    //Devuelve el tamanio de la avioneta
    @Override 
    public int verTamanio(){
    	return miTamanio;
    };
    
    //Devuelve la velocidad de la avioneta
    public int velocidad(){
    	return miVelocidad;
    };
    
        
    protected void movimientoPropio(){
    	int movimiento;
    	movimiento = (miVelocidad * this.sentido);
    	this.ubicacion.moverEnY(movimiento);
    	this.contador++;
    	if (this.contador >= 10){
    		this.contador = 0;
    		this.sentido = ((-1) * this.sentido);
    	}
    }
    
    
    

	public Element getElement(Document doc) {
		Element nave = doc.createElement("Avioneta");
		
		//de avioneta
		Integer valorSentido = new Integer(this.sentido);
		Element sentido = doc.createElement("Sentido");
		nave.appendChild(sentido);
		sentido.setTextContent(valorSentido.toString());
		
		Integer valorContador = new Integer(this.contador);
		Element contador = doc.createElement("Contador");
		nave.appendChild(contador);
		contador.setTextContent(valorContador.toString());
		
		//de armado
		this.persistirArmado(doc, nave);
		
		return nave;
	}
	
	 public static Avioneta fromElement(Element element) {
		  Avioneta nave = new Avioneta(-1,-1);
		  Armado.recuperarArmado(element,nave);
		  recuperarPropios(element,nave);
		  return nave;
	}
	    
	    private static void recuperarPropios(Element element, Avioneta avioneta) {
			NodeList childs = element.getChildNodes();
			for (int i = 0; i < childs.getLength(); i++) {
				Node child = childs.item(i);
				if (child.getNodeName().equals("Sentido")) {
					avioneta.sentido = Integer.parseInt(child.getTextContent());
				}
				else if (child.getNodeName().equals("Contador")) {
					avioneta.contador = Integer.parseInt(child.getTextContent());
				}
			}
		}
	

    

}
